<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // ES6继承，本质上是为了实现上游构造器原型方法和属性的合法传递
        // 在子类构造体内，可以通过设定的super关键字表示父类对象，用于调用父类的属性和方法
        // ES6的super关键字的设定主要是为了实现两种要求和特性
        // 1.贴合现有的面向对象的语法体系
        // 2.让代码可读性增强

        //父类
        class Person {
            info = "父测试属性info";
            test = null;
            constructor(test) {
                this.test = test;
            }
            play() {
                console.log("正在玩游戏");
            }
        }

        //子类
        class Man extends Person {
            msg = "子类的msg";
            constructor(test) {
                //当子类自定义构造函数时候，必须在构造函数的第一行明确完成父类的构造器使用，实现父类的实例构建
                // super实际上就是一个特殊的执行函数，用于在子类构造器中完成父类构造器的调用
                super(test);
            }
            eat() {
                console.log("正在吃饭");
            }
            playAndEat() {
                console.log("吃和玩");
                this.eat();
                // this.play();
                super.play();
            }

        }
        // let p=new Person("test的值");
        // console.log(p);
        // p.play();

        let m = new Man("哈哈哈，我就试试看哈哈哈");
        console.log(m);
        // m.eat();
        // m.playAndEat();
        m.play();

    </script>
</body>

</html>